home *** CD-ROM | disk | FTP | other *** search
- head 1.2;
- branch ;
- access ;
- symbols ;
- locks ; strict;
- comment @ * @;
-
-
- 1.2
- date 90.02.14.18.18.21; author douglis; state Exp;
- branches ;
- next 1.1;
-
- 1.1
- date 88.06.27.16.18.42; author ouster; state Exp;
- branches ;
- next ;
-
-
- desc
- @@
-
-
- 1.2
- log
- @fixed bug relating to calling getopt on two different argv vectors.
- @
- text
- @/*
- * Copyright (c) 1987 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific written prior permission. This software
- * is provided ``as is'' without express or implied warranty.
- */
-
- #if defined(LIBC_SCCS) && !defined(lint)
- static char sccsid[] = "@@(#)getopt.c 4.6 (Berkeley) 4/19/88";
- #endif /* LIBC_SCCS and not lint */
-
- #include <stdio.h>
-
- /*
- * get option letter from argument vector
- */
- int opterr = 1, /* if error message should be printed */
- optind = 1, /* index into parent argv vector */
- optopt; /* character checked for validity */
- char *optarg; /* argument associated with option */
-
- #define BADCH (int)'?'
- #define EMSG ""
- #define tell(s) { \
- if (opterr) { \
- fputs(*nargv, stderr); \
- fputs(s, stderr); \
- fputc(optopt, stderr); \
- fputc((int)'\n', stderr); \
- } \
- return(BADCH); \
- }
-
- getopt(nargc, nargv, ostr)
- int nargc;
- char **nargv, *ostr;
- {
- static char *place = EMSG; /* option letter processing */
- register char *oli; /* option letter list index */
- static char **lastargv;
- char *index();
-
- if (!*place) { /* update scanning pointer */
- lastargv = nargv;
- } else if (lastargv != nargv) {
- place = EMSG;
- lastargv = nargv;
- }
- if (!*place) { /* update scanning pointer */
- if (optind >= nargc || *(place = nargv[optind]) != '-')
- return(EOF);
- if (place[1] && *++place == '-') { /* found "--" */
- ++optind;
- return(EOF);
- }
- } /* option letter okay? */
- if ((optopt = (int)*place++) == (int)':' ||
- !(oli = index(ostr, optopt))) {
- if (!*place)
- ++optind;
- tell(": illegal option -- ");
- }
- if (*++oli != ':') { /* don't need argument */
- optarg = NULL;
- if (!*place)
- ++optind;
- }
- else { /* need an argument */
- if (*place) /* no white space */
- optarg = place;
- else if (nargc <= ++optind) { /* no arg */
- place = EMSG;
- tell(": option requires an argument -- ");
- }
- else /* white space */
- optarg = nargv[optind];
- place = EMSG;
- ++optind;
- }
- return(optopt); /* dump back option letter */
- }
- @
-
-
- 1.1
- log
- @Initial revision
- @
- text
- @d45 1
- d49 6
- d61 1
- a61 1
- } /* option letter okay? */
- @
-